public class WiggleSubsequence0105_376 {

    /**
     * 1、上下坡有平坡
     * 2、首位元素
     * 3、单调坡有平坡
     *
     */
    public int wiggleMaxLength(int[] nums) {

        if(nums.length <= 1) return nums.length;

        int res = 1; //记录摆动序列数，默认首元素

        int prediff = 0; //峰值前 差值 默认0 表示模拟首元素前有个平坡
        int curdiff = 0; //峰值后 差值 默认值无所谓，后面会计算

        for (int i = 1; i < nums.length; i++) {
            curdiff = nums[i] - nums[i-1];
            if((prediff <= 0 && curdiff > 0)|| (prediff >= 0 && curdiff<0)){
                res++;
            }
            if(curdiff != 0) prediff = curdiff; //单调坡有平坡情况下 不用更新峰值钱差值。
        }
        return res;
    }
}
